package org.yh.moodpraise.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PostMapping;
import org.yh.moodpraise.model.Message;
import org.yh.moodpraise.model.MoodVo;
import org.yh.moodpraise.model.User;
import org.yh.moodpraise.service.MoodService;
import org.yh.moodpraise.service.UserService;

import javax.servlet.http.HttpSession;
import java.util.List;

/**
 * @Author: yh
 * @Date: 2020/6/20
 * @Description:
 */

@Controller
public class LoginController {
    @Autowired
    UserService userService;
    @Autowired
    MoodService moodService;

    //使用传统表单提交总是出问题，这种方式配合th:Object="${user}"
    //不用加@responseBody注解,既能接受参数，又能实现页面跳转
    @PostMapping("/doLogin")
    public String process(@ModelAttribute User user, Model model, HttpSession session) {
        User u = userService.getUserByUsername(user.getUsername());
        if (u == null) {
            Message msg = new Message(500,"用户不能为空!",null);
            model.addAttribute("message", msg);
            return "error";
        } else if (u.getUsername().equals(user.getUsername()) && u.getPassword().equals(user.getPassword())) {
            List<MoodVo> moodVos = getAllMoodVos();
            for (MoodVo moodVo : moodVos) {
               System.out.println(moodVo);
            }
            model.addAttribute("moodVos",moodVos);
            model.addAttribute("user",u);
            /**
             * 一个会话，发生多次请求。如何实现多个请求共享数据？
             *  Cookie：简单来说，是客户端技术：将需要共享的数据保存在客户端（浏览器），
             *  如果一个会话的多个请求，如果有需要共享数据的页面，直接从客户获取需要的数据即可。
             *   比如 Cookie cookie = new Cookie(“currentName”,”Rare”)
             *    将数据保存到客户端:  response.addCookie(cookie);
             *    获取cookie        : Cookie[] cookies=request.getCookies()
             *
             *   session: 由服务端程序创建，并为session对象创建唯一的sessionId。将
             *        sessionId存储在客户端中。
             *        客户端发送请求（携带sessionId）,服务端找到session对象，并利用session保存
             *        用户在多个页面的操作信息。
             */

            session.setAttribute("user",u);
            return "showMood";
        }
        //登录失败
//            resp.setContentType("application/json;charset=utf-8");
//            PrintWriter out = resp.getWriter();
//            out.write("用户名或密码错误！请重新登录");
//            out.flush();
//            out.close();
        Message msg = new Message(400, "用户名或密码错误！请重新登录", null);
        model.addAttribute("message",msg);
        return "error";
    }

     private List<MoodVo> getAllMoodVos() {
        return moodService.getAllMoodVos();
    }


}
